<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<link href="../static/bootstrap/css/bootstrap.min.css" rel="stylesheet">
<link rel="stylesheet" href="../static/css/sb-admin-2.css">
<link href="../static/prettify/github-v2.min.css" rel="stylesheet">
<!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
<!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
<!--[if lt IE 9]>
      <script src="../static/js/html5shiv.min.js"></script>
      <script src="../static/js/respond.min.js"></script>
    <![endif]-->
<style>
body {
	word-wrap: break-word;
}
</style>
</head>
<body onload="prettyPrint();">
	<div id="nav"></div>

	<div id="page-wrapper" style="padding: 10px">
		<div class="container-fluid">
			<div class="row">
				<div class="col-md-12">
					<h2>其他可配置项</h2>
					<h3>1.二次登录验证的开启和关闭</h3>
					默认情况下，没有开启二次登录验证，如果需要开启，需要在resources/spring/applicationContext.xml中进行注册一个GoogleAuthenticator，例如：
					<pre class="prettyprint lang-xml">&lt;bean class=&quot;me.qyh.blog.core.security.GoogleAuthenticator&quot;&gt;
	&lt;constructor-arg value=&quot;qz23 fugf krvd krh6 cors 4lpq jw3y ilxy&quot;/&gt;
&lt;/bean&gt;</pre>
					GoogleAuthenticator接受如下两个构造函数：
					<pre class="prettyprint lang-java">GoogleAuthenticator(String secret)
GoogleAuthenticator(String secret,int window)</pre>
					<p>
						其中secret为密钥，可以在<a
							href="https://myaccount.google.com/signinoptions/two-step-verification">https://myaccount.google.com/signinoptions/two-step-verification</a>中选择身份验证器应用可以看到
					</p>
					<p>window为窗口，默认为3，也就是说，-30s~30s内都可以认证通过，最大值为17</p>

					<h3>2.文章点击策略</h3>
					<h4>
						2.1
						<code>me.qyh.blog.core.service.impl.CacheableHitsStrategy</code>
					</h4>
					<p>默认缓存的策略，在该缓存策略下，每隔一段时间才会将文章的点击量写入数据库以及索引文件，因此在根据点击量排序时，无法实时反映</p>
					<p>这个类接收以下可配置参数：</p>
					<div class="table-responsive">
						<table class="table">
							<tr>
								<th>参数名</th>
								<th>类型</th>
								<th>默认值</th>
								<th>说明</th>
							</tr>
							<tr>
								<td>validIp</td>
								<td>boolean</td>
								<td>true</td>
								<td>是否缓存IP，如果为true，那么在一个刷新周期内，同一IP重复点击只会被视为一次点击</td>
							</tr>
							<tr>
								<td>maxIps</td>
								<td>int</td>
								<td>100</td>
								<td>如果在一个刷新周期内，超过maxIps个不同的ip点击了该文章，立即将该文章的点击数写入数据库</td>
							</tr>
							<tr>
								<td>flushNum</td>
								<td>int</td>
								<td>50</td>
								<td>刷新时，每flushNum篇点击数写入数据库，例入有51篇文章待写入，那么默认将会分两次写入</td>
							</tr>
						</table>
						<div class="alert alert-warning">需要定时任务的支持，默认为
						<pre class="prettyprint lang-xml">&lt;!-- 如果配置了缓存点击量策略，那么每隔600s更新文章点击量 --&gt;
&lt;task:scheduled ref=&quot;cacheableHitsStrategy&quot; method=&quot;flush&quot;
	fixed-rate=&quot;600000&quot; /&gt;</pre>
						</div>
					</div>
					
					<h4>
						2.2
						<code>me.qyh.blog.core.service.impl.ArticleServiceImpl$DefaultHitsStrategy(private)</code>
					</h4>
					<p>每次点击文章都将会被写入数据库以及索引文件</p>
				</div>
			</div>
		</div>
	</div>
</body>

<script type="text/javascript" src="../static/jquery/jquery.min.js"></script>
<script type="text/javascript"
	src="../static/bootstrap/js/bootstrap.min.js"></script>
<script type="text/javascript" src="../static/prettify/prettify.js"></script>
<script>
	$(function() {
		$("#nav").load("nav.html");
	});
</script>
</html>